Cache-Control Header
前提と概要
こんな感じで指定する
code:response
Cache-Control: no-store
code:response
Cache-Control: private, no-store, no-cache, must-revalidate
このprivateとかno-storeとかがどういう意味?という話
defaultでも条件を満たしていればcacheされる
Cache-Controlhederは、cacheを防ぐために使用するという側面もある
しかし、CDNによってはその仕様を無視するものがある
例えば、defaultではcacheしないとか、privateを付けたらcacheしないとか
直観(人による)と、HTTPの仕様と、CDNの実装にズレがあって難しいmrsekut.icon
Cache-Controlは、Resonse Header/Request Headerのいずれでも指定できる
ただし殆どの場合、Response Headerの話をしている
たまに、Request Headerでも指定するよ、という感覚で良さそうmrsekut.icon
Response Headerに指定できるdirectives
cacheに保存する条件を指定するもの
cacheの使われ方の指定
cacheの更新の方法を指定する
cacheの期限が切れた時に、どうするか?
cacheを使い続けるか?cacheを放棄するか?
放棄する場合、originがダウンしている時のことも考えているか?
データの取扱を指定する
defaultでは、ProxyやChromeのデータセーバーなどが、通信量の削減などのために、勝手にデータを弄ることがあるので、それを防ぐための指定 Request Headerに指定できるdirectives
参考
本に書いているのは基本的にresponse headerの話をしている
table:_
Directive Request Response
max-age yes yes
max-stale yes
min-fresh yes
no-cache yes yes
no-store yes yes
no-transform yes yes
only-if-cached yes
must-revalidate yes
public yes
private yes
proxy-revalidate yes
s-maxage yes
no-cacheとmust-revalidateを併用する意味 #?? cacheの期間指定
cacheの期限が切れた時にどうするか?
例えば、
revalidateするが、originがdownしていたのでcacheを使い続けた
revalidateするが、それが完了するまでは古いcacheを使用した (s-w-r)
revalidateした後に、更新がなかったのでcacheを使い続けた
指定した期間保存されるとは限らない
cacheにも容量がある
期間までに、それ以上のデータが入ってくれば、元々あったcacheは押し出されて消えることになる
期限が切れたからと言って、storageから消えるとは限らない
cacheのstorageには入れておいて、次来た時の為に残すこともある
実装に依る
誰が誰に対して指示をしていて、誰がcacheをして、cacheしていない時と比べて、どこが速くなっているのか #?? request headerのCache Control
client(broser?)が、Proxyに、対して言う
Cacheが有効な状況下で、
何もしていない場合は、ProxyはCacheを返す
no-cacheとかをreqで送れば、ProxyはCacheを更新する、感じ?
Proxyはreqからくるno-cacheは無視するので、指定してもほぼ無意味だということ?
この指定って意味ある?
コレとコレは併用することはありえない、というパターンがあれば例を見たい
max-ageとno-cacheは併用できない
max-ageとmust-revalidate/proxy-revalidatetは併用できる
指定する順番と意味
用語
age
cacheされ始めてからの経過時間
cacheされていない場合は、そもそもこの値は存在しない
revalidate
再検証
originに問い合わせること
cacheが最新か、古くなってないか
TTLが未定義な時は?
max-ageなどを一切指定いない時の動作
react-queryのcacheもresponse headerの内容によって変わるのか?
参考
たぶんここじゃない